// $Id: verifier_form.js 249 2008-07-29 19:43:28Z pcoustillas $
// Creation : Pierre Coustillas

function virg2pt(champ)
{
	//cette fonction convertit les virgule en point du champ fournit.
	champ.value=champ.value.replace(",",".");
}

function verifier ()
{
	//le premier param est le nom du formaulaire
	//le deuxieme param est la couleur du text (recherche d'un <div id="nom du champ"> à remettre en couleur normal si plus d'erreur)
	//ensuite les paramètres vont par deux, le nom du champ suivi du DES tests à effectuer séparés par des #
	/* Exemple : 
	<script language="javascript" src="../javascripts/verifier_form.js" type="text/javascript"></script>
	<script type="text/javascript">
	function verif_form()
	{
		if (verifier('info_soc','black','nom_soc','vide#carac_spec','devise','vide','monfichier','vide'))
		{
			document.info_soc.submit();
		} else {
			alert("<?php aff_lang('Une des valeurs saisie n\'est pas correct.\nMerci de corriger avant de poursuivre.') ?>")	
		}

	}
	</script>
	
	<input type="button" value="<?php aff_lang("Envoyer") ?>" onclick="verif_form()">

	*/
	argc = verifier.arguments.length;
	argv = verifier.arguments;

	nom_frm=argv[0];
	coul_sans_erreur=argv[1];
	erreur_form=0 // pas d'erreur jusqu'a preuve du contraire
	

	//boucler sur tous les champs demandés
	for (i=2; i<argc; i=i+2)
	{
		champ=argv[i];
		types=argv[i+1];
	
		var reg=new RegExp("#", "g");
		tab_type = types.split(reg)
		
		erreur_champ=0
		

		//boucler sur tout les tests demandés
		for (j=0 ; j < tab_type.length ; j++)
		{
			//alert(champ + " '" + document.forms[nom_frm].elements[champ].value + "'");
			//switch sur le type de test demandés

			nom_test=tab_type[j]; //recoit le nom du test 
			var reg=new RegExp("%", "g"); // qui peut contenir un % qui est le param du test
			tab_test = nom_test.split(reg);


			switch (tab_test[0])
			{
				case "vide" :
					if (est_vide(nom_frm,champ))
					{
						erreur_champ+=1;
					}
					break;

				case "mail" :
					if (est_pas_mail(nom_frm,champ))
					{
						erreur_champ+=1;
					}
					break;

				case "carac_spec" :
					if (contient_carac_spec(nom_frm,champ))
					{
						erreur_champ+=1;
					}
					break;
				case "date_" :
					if (est_pas_une_date(nom_frm,champ))
					{
						erreur_champ+=1;
					}
					break;
				case "egale_a" :
					if (est_egale_a(nom_frm,champ,tab_test[1]))
					{
						erreur_champ+=1;
					}
					break;
				case "pas_egale_a" :
					if (est_pas_egale_a(nom_frm,champ,tab_test[1]))
					{
						erreur_champ+=1;
					}
					break;
				case "est_nombre" :
					if (est_pas_nombre(nom_frm,champ))
					{
						erreur_champ+=1;
					}
					break;
				case "est_inf_a_date" :
					if (est_inf_a_date(nom_frm,champ,tab_test[1]))
					{
						erreur_champ+=1;
					}
					

			} //fin de switch
			

		} //fin boucle sur les tests demandés


		if (erreur_champ != 0)
		{
			document.getElementById(champ).style.color="red";
			erreur_form += 1;
		} else {
			document.getElementById(champ).style.color=coul_sans_erreur;
		}

	} // fin boucle sur chaque champs

	if (erreur_form != 0)
	{
		return false;
	} else {
		return true;
	}

}


function est_vide (nom_frm,champ)
{
	if (document.forms[nom_frm].elements[champ].value == "")
	{
		return true	
	} else {
		return false
	}
}

function est_pas_mail(nom_frm,champ)
{
	if (document.forms[nom_frm].elements[champ].value == "") //etre vide n'est pas une erreur
	{
		return false
	} else {
		var reg=new RegExp("^[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+[.][a-zA-Z\.\-_]{1,}[a-zA-Z\-_]+$","i");
		if (reg.test(document.forms[nom_frm].elements[champ].value))
		{
			return false
		} else {
			return true
		}
	}
}

function contient_carac_spec(nom_frm,champ)
{
	if (document.forms[nom_frm].elements[champ].value == "") //etre vide n'est pas une erreur
	{
		return false
	} else {
		var reg=new RegExp("[*{}&.$#;\/:,?\"'()\\=]","g");
		if (reg.test(document.forms[nom_frm].elements[champ].value))
		{
			return true
		} else {
			return false
		}
	}

}

function est_pas_une_date(nom_frm,champ)
{

	var err=0;
	if (document.forms[nom_frm].elements[champ].value != "") //etre vide n'est pas une erreur
	{
		var car1;
		var car2;
		var str=document.forms[nom_frm].elements[champ].value;
		var jour;
		var mois;
		var annee;
		var madate;
	
		if (str.length!=10)
				err=1;
	
		if (err==0)
		{
			car1=str.charAt(2);
			car2=str.charAt(5);
			if (car1!='/' || car2!='/')
				err=1;
	
			if (err==0)
			{
				jour=str.substr(0,2);
				mois=str.substr(3,2);
				annee=str.substr(6,4);
				if ( isNaN(Number(jour)) || isNaN(Number(mois)) || isNaN(Number(annee)) )
					err=1;
	
				if (err==0)
				{
					madate = new Date (annee,mois - 1,jour);
					if (madate.getDate() != jour || (madate.getMonth() + 1)  != mois || madate.getFullYear() != annee)
						err=1
				}
			}
		}
	}

	if (err==0)
		return false;
	else
		return true;
	
}

function est_egale_a(nom_frm,champ,valeur)
{
	if (document.forms[nom_frm].elements[champ].value == "") //etre vide n'est pas une erreur
	{
		return false;
	} else {
		if (document.forms[nom_frm].elements[champ].value == valeur )
		{
			return true;
		} else {
			return false;
		}
	}

}

function est_pas_egale_a(nom_frm,champ,valeur)
{
	if (document.forms[nom_frm].elements[champ].value == "") //etre vide n'est pas une erreur
	{
		return false
	} else {
		if (document.forms[nom_frm].elements[champ].value != valeur )
		{
			return true
		} else {
			return false
		}
	}
}


function est_pas_nombre(nom_frm,champ)
{
   var ValidChars = "0123456789.";
   var IsNumber=true; //jusqu'a preuve du contraire c'est un nombre.
   var Char;
	var valeur=document.forms[nom_frm].elements[champ].value;
	//alert(valeur);
	if (document.forms[nom_frm].elements[champ].value == "") //etre vide n'est pas une erreur
	{
		return false
	} else {
		for (pos_car = 0; pos_car < valeur.length && IsNumber == true; pos_car++) 
		{
			Char = valeur.charAt(pos_car); 
			if (ValidChars.indexOf(Char) == -1)
			{
				IsNumber = false;
			}
		}
		if (IsNumber)
			return false; //car on recherche si ce n'est pas un nombre
		else
			return true; //donc ce n'est pas un nombre
	}
}

function est_inf_a_date(nom_frm,champ,valeur)
{
	if (document.forms[nom_frm].elements[champ].value == "") //etre vide n'est pas une erreur
	{
		return false
	} else {
		frm_jour=document.forms[nom_frm].elements[champ].value.substr(0,2);
		frm_mois=document.forms[nom_frm].elements[champ].value.substr(3,2);
		frm_annee=document.forms[nom_frm].elements[champ].value.substr(6,4);
		valeur_jour=valeur.substr(0,2);
		valeur_mois=valeur.substr(3,2);
		valeur_annee=valeur.substr(6,4);

		if (Date.parse(frm_mois + "/" + frm_jour + "/" + frm_annee) < Date.parse(valeur_mois + "/" + valeur_jour + "/" + valeur_annee))
		{
			return true //la date du champ est inf à la date testé
		} else {
			return false // la date du champ est supérieur ou egal à la date testé
		}
	}
}
